package com.xiuluo.dubbotest.service.impl;

import com.baomidou.mybatisplus.mapper.EntityWrapper;
import com.baomidou.mybatisplus.plugins.Page;
import com.xiuluo.dubbotest.dao.DubboInvokeReqRecordDao;
import com.xiuluo.dubbotest.model.dto.DubboInvokeReqRecordDTO;
import com.xiuluo.dubbotest.model.dto.DubboInvokeRespRecordDTO;
import com.xiuluo.dubbotest.model.po.DubboInvokeReqRecordPO;
import com.xiuluo.dubbotest.common.wrapper.PageResult;
import com.xiuluo.dubbotest.service.DubboInvokeReqRecordService;
import org.springframework.beans.BeanUtils;
import org.springframework.stereotype.Service;

import javax.annotation.Resource;
import java.util.Arrays;
import java.util.List;

/**
 * @author idea
 * @date 2020/3/1
 * @version V1.0
 */
@Service
public class DubboInvokeReqRecordServiceImpl implements DubboInvokeReqRecordService {

    @Resource
    private DubboInvokeReqRecordDao dubboInvokeReqRecordDao;

    @Override
    public PageResult<DubboInvokeRespRecordDTO> selectDubboInokeParam(Integer userId, int page, int pageSize) {
        EntityWrapper<DubboInvokeReqRecordPO> entityWrapper = new EntityWrapper();
        DubboInvokeReqRecordPO dubboInvokeReqRecordPO = new DubboInvokeReqRecordPO();
        dubboInvokeReqRecordPO.setUserId(userId);
        entityWrapper.setEntity(dubboInvokeReqRecordPO);
        entityWrapper.orderDesc(Arrays.asList("id"));

        new PageResult<>();

        List<DubboInvokeReqRecordPO> dubboInvokeReqRecordPOS = dubboInvokeReqRecordDao.selectPage(new Page<DubboInvokeReqRecordPO>(page, pageSize), entityWrapper);
//        List<DubboInvokeRespRecordDTO> dubboInvokeRespRecordDTOS = new ArrayList<>();
//        for (DubboInvokeReqRecordPO invokeReqRecordPO : dubboInvokeReqRecordPOS) {
//            DubboInvokeRespRecordDTO dubboInvokeRespRecordDTO = new DubboInvokeRespRecordDTO();
//            try {
//                String argJson = invokeReqRecordPO.getArgJson();
//                JSONObject jsonObject = JSONObject.parseObject(argJson);
//                JSONObject reqArg = jsonObject.getObject("reqArg", JSONObject.class);
//
//                String interfaceName = getString("interfaceName");
//                String methodName = getString("methodName");
//                String argObjects = getString("argObjects");
//                String argTypes = getString("argTypes");
//
//                dubboInvokeRespRecordDTO.setArgJson(invokeReqRecordPO.getArgJson());
//                dubboInvokeRespRecordDTO.setArgDetail("argTypes:" + argTypes + "  argObjects:" + argObjects);
//                dubboInvokeRespRecordDTO.setMethodName(interfaceName + "#" + methodName);
//                dubboInvokeRespRecordDTOS.add(dubboInvokeRespRecordDTO);
//            } catch (Exception e) {
//                e.printStackTrace();
//            }
//        }

        Integer total = dubboInvokeReqRecordDao.selectCount(entityWrapper);
//        PageResult<DubboInvokeRespRecordDTO> pageResult = PageResult.buildPageResult(page, pageSize, dubboInvokeRespRecordDTOS, total);
        PageResult<DubboInvokeRespRecordDTO> pageResult = PageResult.buildPageResult(page, pageSize, dubboInvokeReqRecordPOS, total);
        return pageResult;
    }

    @Override
    public Boolean saveOne(DubboInvokeReqRecordDTO dubboInvokeReqRecordDTO) {
        DubboInvokeReqRecordPO dubboInvokeReqRecordPO = new DubboInvokeReqRecordPO();
        BeanUtils.copyProperties(dubboInvokeReqRecordDTO, dubboInvokeReqRecordPO);
        int result = dubboInvokeReqRecordDao.insert(dubboInvokeReqRecordPO);
        return result > 0;
    }

    /**
     * 删除调用用例
     */@Override
    public void deleteOne(Integer id, Integer userid)
    {
        DubboInvokeReqRecordPO po = dubboInvokeReqRecordDao.selectById(id);
        if (po.getUserId().equals(userid))
        {
            dubboInvokeReqRecordDao.deleteById(id);
        }
    }

}
